Django Form Handling এবং Validation

Web Development - জ্যাঙ্গো (Django)
243

Django তে ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন খুবই গুরুত্বপূর্ণ একটি বিষয়, যেটি আপনাকে ইউজার থেকে ইনপুট নিয়ে তা ডেটাবেসে সংরক্ষণ এবং যাচাই করার জন্য সহায়তা করে। Django ফর্মগুলি মূলত দুটি উদ্দেশ্যে ব্যবহৃত হয়:

  1. ইউজার ইনপুট গ্রহণ – ফর্ম ব্যবহারকারীর থেকে ডেটা সংগ্রহ করার একটি মাধ্যম।
  2. ভ্যালিডেশন – ইনপুট ডেটা যাচাই করা, যেমন ডেটা সঠিক ফরম্যাটে আছে কি না এবং প্রয়োজনীয় ফিল্ড পূর্ণ হয়েছে কিনা।

Django এ ফর্ম হ্যান্ডলিং সহজ এবং শক্তিশালী, কারণ Django আপনাকে একটি ফর্ম ক্লাস প্রদান করে, যা ব্যবহারকারী ইনপুটের সব দিককে হ্যান্ডল করতে পারে।


Django Form তৈরি করা

১. Django Forms মডিউল ব্যবহার

Django এর ফর্ম তৈরি করতে forms.Form বা forms.ModelForm ক্লাস ব্যবহার করা হয়।

  • forms.Form সাধারণ ফর্মের জন্য, যেখানে কোনো মডেল যুক্ত থাকে না।
  • forms.ModelForm মডেলের জন্য ফর্ম তৈরি করতে ব্যবহার হয়, যাতে মডেল এবং ফর্মের মধ্যে সম্পর্ক তৈরি হয়।

২. Example: Basic Form তৈরি করা (Non-Model Form)

প্রথমে একটি সাধারণ ফর্ম তৈরি করা যাক, যেখানে ফিল্ডগুলো আলাদাভাবে নির্ধারিত থাকবে।

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100, required=True)
    email = forms.EmailField(required=True)
    message = forms.CharField(widget=forms.Textarea, required=True)

এখানে:

  • name: একটি CharField যেখানে ১০০ চরিত্র পর্যন্ত নাম গ্রহণ করা হবে।
  • email: একটি EmailField যা ইমেইল ঠিকানা গ্রহণ করে।
  • message: একটি CharField যা Textarea উইজেট ব্যবহার করে বড় ধরনের টেক্সট গ্রহণ করবে।

৩. Example: ModelForm তৈরি করা

মডেল ভিত্তিক ফর্ম তৈরি করার জন্য forms.ModelForm ব্যবহার করা হয়। এটি ডেটাবেস মডেল এর সাথে সরাসরি সংযুক্ত থাকে এবং ফর্মের ফিল্ডগুলোর জন্য ডেটাবেসের কলামগুলো ব্যবহার করে।

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

এখানে:

  • PostForm একটি মডেল ফর্ম যা Post মডেল থেকে title এবং content ফিল্ডগুলোকে ব্যবহার করছে।

Form Rendering এবং Handling

১. Views এ ফর্ম হ্যান্ডলিং

ফর্ম তৈরির পর, আপনি এটি ডাইনামিকভাবে HTML ফর্ম হিসেবে রেন্ডার করতে পারেন এবং ব্যবহারকারীর ইনপুট গ্রহণ করতে পারেন। views.py ফাইলে ফর্ম হ্যান্ডলিং করা হয়।

from django.shortcuts import render
from .forms import ContactForm

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # ফর্ম ভ্যালিড হলে, ইনপুট ডেটা সংগ্রহ
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']
            # ডেটাবেসে সংরক্ষণ বা ইমেইল পাঠানোর কাজ এখানে করা যেতে পারে
    else:
        form = ContactForm()

    return render(request, 'contact.html', {'form': form})

এখানে:

  • যদি HTTP মেথড POST হয়, তাহলে ফর্মের ইনপুট request.POST থেকে সংগ্রহ করা হয় এবং is_valid() মেথডটি ফর্মের ডেটা যাচাই করে।
  • form.cleaned_data ব্যবহার করে সঠিকভাবে ভ্যালিড ডেটা পাওয়া যায়।

২. HTML টেমপ্লেট এ ফর্ম রেন্ডারিং

টেমপ্লেট ফাইলে ফর্ম রেন্ডার করতে Django তে form.as_p বা form.as_table এর মতো টেমপ্লেট ট্যাগ ব্যবহার করা হয়।

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}  <!-- ফর্মের ফিল্ডগুলো প্যারাগ্রাফ হিসেবে রেন্ডার হবে -->
    <button type="submit">Submit</button>
</form>

এখানে:

  • {% csrf_token %}: এটি CSRF নিরাপত্তার জন্য গুরুত্বপূর্ণ, যা আপনার ফর্মের সুরক্ষা নিশ্চিত করে।
  • {{ form.as_p }}: এটি ফর্মের প্রতিটি ফিল্ড প্যারাগ্রাফ ট্যাগের মধ্যে রেন্ডার করে।

Django Form Validation

১. Built-in Validation

Django ফর্মে কিছু বিল্ট-ইন ভ্যালিডেশন ফিচার রয়েছে, যেমন:

  • required: একটি ফিল্ডের জন্য এটি নিশ্চিত করে যে, সেটি ফর্মে পূর্ণ হতে হবে।
  • max_length: এই ভ্যালিডেশনটি নিশ্চিত করে যে ফিল্ডের মান একটি নির্দিষ্ট দৈর্ঘ্যের বেশি হবে না।

উদাহরণ:

name = forms.CharField(max_length=100, required=True)

২. Custom Validation

আপনি যদি কোনো কাস্টম ভ্যালিডেশন চান, তবে ফর্ম ক্লাসে clean_<fieldname>() মেথড ব্যবহার করতে পারেন। এতে আপনি বিশেষ কোনো ভ্যালিডেশন লজিক অ্যাড করতে পারবেন।

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()

    def clean_email(self):
        email = self.cleaned_data.get('email')
        if "@example.com" not in email:
            raise forms.ValidationError("Email must be from 'example.com'.")
        return email

এখানে:

  • clean_email() মেথডটি ইমেইল ফিল্ডের জন্য কাস্টম ভ্যালিডেশন করে, যেখানে ইমেইলটি অবশ্যই example.com ডোমেইন থেকে হতে হবে।

৩. ফর্ম ভ্যালিডেশন মেসেজ

ফর্ম ভ্যালিডেশনটি সফল হলে বা ব্যর্থ হলে আপনি কাস্টম মেসেজ প্রদান করতে পারেন।

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100, required=True)
    email = forms.EmailField(required=True)

    def clean_name(self):
        name = self.cleaned_data.get('name')
        if len(name) < 3:
            raise forms.ValidationError("Name must be at least 3 characters long.")
        return name

এখানে, যদি নামের দৈর্ঘ্য ৩ এর কম হয়, তাহলে একটি কাস্টম ভ্যালিডেশন মেসেজ দেখানো হবে।


Django Forms ব্যবহার করার সুবিধা

  • সহজ ইনপুট হ্যান্ডলিং: Django ফর্ম ব্যবহার করে ইউজারের ইনপুট সহজে গ্রহণ এবং হ্যান্ডলিং করা যায়।
  • স্বয়ংক্রিয় ভ্যালিডেশন: Django ফর্ম স্বয়ংক্রিয়ভাবে ইনপুট ভ্যালিডেশন করে, যেমন required, max_length, email ফিল্ডের জন্য।
  • কাস্টম ভ্যালিডেশন: Django ফর্মে কাস্টম ভ্যালিডেশন মেথড ব্যবহার করে আপনি খুবই সহজে ইনপুট যাচাই করতে পারেন।
  • HTML টেমপ্লেট রেন্ডারিং: Django ফর্মগুলি HTML টেমপ্লেটের মাধ্যমে সহজে রেন্ডার করা যায়, যা ফর্মের ডেটা জমা দেওয়ার প্রক্রিয়া সহজ করে তোলে।

সারাংশ

Django তে ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন অত্যন্ত শক্তিশালী এবং ব্যবহারযোগ্য। Django Forms আপনাকে ইউজার ইনপুট গ্রহণ এবং ডেটা ভ্যালিডেশন সহজভাবে পরিচালনা করার সুযোগ দেয়। forms.Form এবং forms.ModelForm ব্যবহারের মাধ্যমে আপনি যেকোনো ধরনের ফর্ম তৈরি করতে পারেন এবং কাস্টম ভ্যালিডেশন ব্যবহার করে ইনপুট যাচাই করতে পারেন।

Content added By

Django এর Form Class ব্যবহার করে ফর্ম তৈরি

286

Django এর Forms সিস্টেম ব্যবহার করে ওয়েব অ্যাপ্লিকেশনে ইউজার ইন্টারফেসের মাধ্যমে ডেটা গ্রহণ এবং প্রক্রিয়াকরণ সহজভাবে করা যায়। Django ফর্ম ক্লাস (Form Class) ব্যবহার করে আপনি HTML ফর্ম তৈরি করতে পারেন এবং ডেটা ভ্যালিডেশন, প্রক্রিয়াকরণ ও সেভ করার কাজগুলো করতে পারেন। এটি Django এর ModelForms এর সঙ্গে ইন্টিগ্রেট হতে পারে, যা ডেটাবেসের মডেলগুলির সাথে কাজ করে।

এখানে আমরা Django এর Form Class ব্যবহার করে একটি সাধারণ ফর্ম তৈরি করার প্রক্রিয়া আলোচনা করব।


Django ফর্ম তৈরি করার ধাপ

১. Forms.py ফাইল তৈরি করা

প্রথমে আপনার অ্যাপের forms.py ফাইলটি তৈরি করতে হবে। যদি এটি আগে থেকে না থাকে, তাহলে এই ফাইলটি তৈরি করুন।

২. ফর্ম ক্লাস তৈরি করা

এখন, forms.py ফাইলে আপনি ফর্ম ক্লাস তৈরি করবেন। উদাহরণস্বরূপ, একটি কন্ট্যাক্ট ফর্ম তৈরি করা যেতে পারে, যেখানে ব্যবহারকারী তার নাম, ইমেইল এবং মেসেজ ইনপুট করতে পারবে।

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100, label='Your Name')  # নাম ফিল্ড
    email = forms.EmailField(label='Your Email')  # ইমেইল ফিল্ড
    message = forms.CharField(widget=forms.Textarea, label='Your Message')  # মেসেজ ফিল্ড

এখানে:

  • CharField: সাধারণ টেক্সট ইনপুট ফিল্ড, যেমন নামের জন্য।
  • EmailField: ইমেইল অ্যাড্রেস ইনপুট ফিল্ড, যা ইমেইল ঠিকানা যাচাই করে।
  • Textarea: বড় টেক্সটের জন্য, যেমন একটি মেসেজ ইনপুট ফিল্ড।

label এর মাধ্যমে ফর্ম ফিল্ডের লেবেল সেট করা হয়, যা ব্যবহারকারীর জন্য নির্দেশনা হিসেবে কাজ করে।


৩. ফর্ম ভ্যালিডেশন এবং প্রক্রিয়াকরণ

এখন, Django ভিউ ফাংশনে ফর্মটি প্রক্রিয়া ও ভ্যালিডেশন করা হবে। যখন ইউজার ফর্ম সাবমিট করবে, তখন Django ফর্মের ডাটা ভ্যালিড করবে এবং সেই অনুযায়ী প্রক্রিয়া করবে।

views.py ফাইলে ফর্ম হ্যান্ডলিং:

from django.shortcuts import render
from .forms import ContactForm

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)  # ফর্মটি POST ডেটা দিয়ে তৈরি হচ্ছে
        if form.is_valid():  # ফর্মের ডেটা ভ্যালিড কিনা পরীক্ষা
            # ডেটা প্রক্রিয়াকরণ বা সেভ করা
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']
            # এখানে আপনি মেসেজটি ডাটাবেসে সেভ করতে পারেন অথবা ইমেইল পাঠাতে পারেন
            # উদাহরণস্বরূপ:
            # send_email(name, email, message)
            return render(request, 'success.html')  # সফলভাবে সাবমিট হলে একটি সফল পেজ দেখান
    else:
        form = ContactForm()  # ফর্মটি GET রিকোয়েস্টের জন্য খালি থাকে
    return render(request, 'contact.html', {'form': form})
  • request.method == 'POST': চেক করা হচ্ছে যে, ফর্মটি সাবমিট করা হয়েছে কিনা।
  • form.is_valid(): এই মেথডটি চেক করে যে, ফর্মের ইনপুট ভ্যালিড কিনা (যেমন ইমেইল ফরম্যাট সঠিক কিনা, ফিল্ডগুলি পূর্ণ হয়েছে কিনা)।
  • form.cleaned_data: এটি ফর্ম থেকে সঠিকভাবে ফিল্টার করা এবং স্যানিটাইজ করা ডেটা দেয়।

৪. ফর্ম HTML টেমপ্লেট তৈরি করা

এখন, আপনাকে ফর্মটি একটি HTML টেমপ্লেটে রেন্ডার করতে হবে। উদাহরণস্বরূপ, একটি contact.html টেমপ্লেট তৈরি করা যাক:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Contact Form</title>
</head>
<body>
    <h2>Contact Us</h2>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}  <!-- ফর্মের সব ফিল্ড গুলি প্যারাগ্রাফের মধ্যে দেখাবে -->
        <button type="submit">Submit</button>
    </form>
</body>
</html>

এখানে:

  • {% csrf_token %}: এটি CSRF (Cross-Site Request Forgery) প্রতিরোধের জন্য Django এর নিরাপত্তা টোকেন।
  • {{ form.as_p }}: এই টেমপ্লেট ট্যাগ Django ফর্মের ইনপুট ফিল্ডগুলোকে HTML প্যারাগ্রাফ (<p>) হিসেবে রেন্ডার করবে। আপনি এটি {{ form.as_table }} বা {{ form.as_ul }} দিয়েও রেন্ডার করতে পারেন।

৫. URL কনফিগারেশন

অবশেষে, আপনার urls.py ফাইলে এই ভিউটির URL কনফিগার করতে হবে।

from django.urls import path
from . import views

urlpatterns = [
    path('contact/', views.contact_view, name='contact'),  # contact_view ভিউকে /contact URL এর সাথে যুক্ত করা
]

ফর্মের ফিচারসমূহ

  • ভ্যালিডেশন: Django ফর্ম ক্লাস স্বয়ংক্রিয়ভাবে ইনপুট ভ্যালিডেশন হ্যান্ডেল করে। আপনি চাইলে কাস্টম ভ্যালিডেশনও যোগ করতে পারেন।
  • ক্লিনড ডেটা: form.cleaned_data এর মাধ্যমে আপনি ফর্মের নিরাপদ ডেটা বের করতে পারেন।
  • স্টাইলিং: Django ফর্ম কাস্টম HTML কোডের মাধ্যমে স্টাইল করা যেতে পারে, অথবা আপনি Django ফর্ম উইজেট ব্যবহার করে ফর্মের আউটপুট কাস্টমাইজ করতে পারেন।

Django ফর্ম ক্লাস ব্যবহারের মাধ্যমে আপনি খুব সহজে ডেটা ভ্যালিডেশন, প্রক্রিয়াকরণ এবং সেভিং এর কাজ করতে পারবেন। এটি ওয়েব ফর্ম তৈরির প্রক্রিয়াকে আরও কার্যকর এবং নিরাপদ করে তোলে।

Content added By

Form Validation এবং Custom Validation

223

Django ফর্ম (Forms) তৈরি করতে এবং ব্যবহারকারীর ইনপুট যাচাই (Validation) করার জন্য একটি শক্তিশালী সিস্টেম প্রদান করে। ফর্ম ভ্যালিডেশন ব্যবহারকারীর প্রদত্ত ডেটার সঠিকতা এবং পূর্ণতা নিশ্চিত করতে সহায়তা করে। আপনি ডিফল্ট ভ্যালিডেশন ফিচার ব্যবহার করতে পারেন অথবা কাস্টম ভ্যালিডেশন তৈরি করে বিশেষ ধরনের যাচাই করতে পারেন।


Django Form Validation

১. ফর্ম ভ্যালিডেশন কী?

ফর্ম ভ্যালিডেশন হলো প্রক্রিয়া যা ব্যবহারকারীর ইনপুট যাচাই করে, যাতে নিশ্চিত হওয়া যায় যে ইনপুটগুলো সঠিক এবং ডেটাবেসে সেভ করার উপযুক্ত। Django ফর্মগুলোতে দুটি প্রধান ধরনের ভ্যালিডেশন রয়েছে:

  • ডিফল্ট ভ্যালিডেশন: Django নিজেই ফিল্ডের প্রকার অনুযায়ী কিছু স্ট্যান্ডার্ড ভ্যালিডেশন সরবরাহ করে (যেমন, একটি ইমেইল ফিল্ডের জন্য সঠিক ইমেইল ফর্ম্যাট যাচাই করা)।
  • কাস্টম ভ্যালিডেশন: আপনি নিজে একটি বিশেষ শর্তে ফর্ম ইনপুট যাচাই করতে পারেন।

২. Django ফর্মে ডিফল্ট ভ্যালিডেশন

Django ফর্মের মডেল ফিল্ডের জন্য ডিফল্ট ভ্যালিডেশন সাধারণত স্বয়ংক্রিয়ভাবে পরিচালিত হয়। উদাহরণস্বরূপ, CharField বা EmailField ফিল্ডের জন্য, Django নিজে একটি মিনিমাম দৈর্ঘ্য বা সঠিক ইমেইল ফরম্যাট চেক করে।

from django import forms

class UserForm(forms.Form):
    username = forms.CharField(max_length=100)
    email = forms.EmailField()

এই কোডের মধ্যে:

  • username: একটি সাধারণ টেক্সট ফিল্ড, যেখানে ১০০ অক্ষরের বেশি ইনপুট গ্রহণ করা যাবে না।
  • email: ইমেইল ফিল্ড, যেটি নিশ্চিত করে যে ব্যবহারকারীর দেয়া ইনপুট একটি বৈধ ইমেইল ঠিকানা।

৩. ফর্মের is_valid() মেথড

যখন আপনি ফর্মে ডেটা প্রেরণ করেন, তখন is_valid() মেথডটি ব্যবহারকারীর ইনপুট যাচাই করে। যদি সমস্ত ইনপুট সঠিক থাকে, এটি True রিটার্ন করে, অন্যথায় False রিটার্ন করে।

form = UserForm(request.POST)

if form.is_valid():
    # ডেটা সঠিক, এখানে প্রসেস করা যাবে
    username = form.cleaned_data['username']
    email = form.cleaned_data['email']
else:
    # ডেটা ভুল, ত্রুটি দেখানো হবে
    errors = form.errors

এখানে:

  • cleaned_data: যদি ফর্মটি বৈধ হয়, তাহলে cleaned_data dictionary দিয়ে ফর্মের সব ইনপুট পাওয়া যাবে।
  • errors: যদি ফর্মটি অবৈধ হয়, ত则 errors property দিয়ে ইনপুটের ত্রুটি দেখতে পারবেন।

Custom Validation (কাস্টম ভ্যালিডেশন)

Django ফর্মের মাধ্যমে আপনি নিজের কাস্টম ভ্যালিডেশন ফাংশন তৈরি করতে পারেন যা আপনার নির্দিষ্ট ব্যবসায়িক লজিক অনুসারে ইনপুট যাচাই করবে। কাস্টম ভ্যালিডেশন করার জন্য আপনি clean_<field_name>() মেথড বা ফর্মের clean() মেথড ব্যবহার করতে পারেন।

১. ফিল্ড ভিত্তিক কাস্টম ভ্যালিডেশন

আপনি যদি একটি নির্দিষ্ট ফিল্ডের জন্য কাস্টম ভ্যালিডেশন করতে চান, তাহলে clean_<field_name>() মেথডটি ব্যবহার করবেন। এখানে <field_name> হলো আপনার ফিল্ডের নাম।

class UserForm(forms.Form):
    username = forms.CharField(max_length=100)
    email = forms.EmailField()

    def clean_username(self):
        username = self.cleaned_data.get('username')
        if 'admin' in username:
            raise forms.ValidationError("Username cannot contain 'admin'.")
        return username

এখানে:

  • clean_username() মেথডটি username ফিল্ডের জন্য কাস্টম ভ্যালিডেশন করে, এবং যদি ইউজারনেমে 'admin' থাকে, তবে একটি ত্রুটি বার্তা রিটার্ন করবে।

২. ফর্ম ভিত্তিক কাস্টম ভ্যালিডেশন

কখনও কখনও আপনাকে পুরো ফর্মের উপর কাস্টম ভ্যালিডেশন করতে হতে পারে, যেমন দুটি ফিল্ডের মধ্যে সম্পর্ক চেক করা। এই জন্য clean() মেথড ব্যবহার করা হয়।

class UserForm(forms.Form):
    username = forms.CharField(max_length=100)
    email = forms.EmailField()
    
    def clean(self):
        cleaned_data = super().clean()
        username = cleaned_data.get('username')
        email = cleaned_data.get('email')
        
        if username and email:
            if username.lower() == email.lower():
                raise forms.ValidationError("Username and email cannot be the same.")
        
        return cleaned_data

এখানে:

  • clean() মেথডে, আমরা ফর্মের সব ইনপুট যাচাই করে নিশ্চিত করেছি যে username এবং email একসাথে সমান না হয়।

৩. ফর্মের ত্রুটি প্রদর্শন

কাস্টম ভ্যালিডেশন যদি ত্রুটি উত্পন্ন করে, তবে আপনি তা ফর্মের ত্রুটি হিসেবে প্রদর্শন করতে পারেন। উদাহরণস্বরূপ:

form = UserForm(request.POST)
if form.is_valid():
    # ফর্ম প্রক্রিয়া করুন
else:
    # ত্রুটি দেখান
    for field, errors in form.errors.items():
        for error in errors:
            print(f"Error in {field}: {error}")

Conclusion (সারাংশ)

Django তে ফর্ম ভ্যালিডেশন একটি গুরুত্বপূর্ণ ফিচার যা ডেটা সঠিকতা নিশ্চিত করে। Django স্বয়ংক্রিয়ভাবে অনেক সাধারণ ভ্যালিডেশন প্রদান করে, তবে কাস্টম ভ্যালিডেশন ব্যবহার করে আপনি বিশেষ প্রয়োজনীয়তা অনুসারে ইনপুট যাচাই করতে পারেন। Django ফর্মের clean() এবং clean_<field_name>() মেথডগুলো কাস্টম লজিক প্রয়োগের জন্য ব্যবহার করা হয়, যা আপনাকে আরও নিয়ন্ত্রিত এবং উন্নত ফর্ম ভ্যালিডেশন তৈরি করতে সক্ষম করে।

Content added By

ফর্ম সাবমিশন এবং ফর্ম ডেটা প্রক্রিয়াকরণ

189

Django তে ফর্ম (Forms) ব্যবহার করা হয় ইউজার থেকে ডেটা গ্রহণ করার জন্য, যেমনঃ কন্টাক্ট ফর্ম, রেজিস্ট্রেশন ফর্ম, লগইন ফর্ম ইত্যাদি। Django এর ফর্ম সিস্টেম আপনাকে ইউজার ইনপুট ভ্যালিডেশন, ডেটা প্রক্রিয়াকরণ এবং সুরক্ষিতভাবে ডেটা সংরক্ষণ করতে সাহায্য করে।


ফর্ম সাবমিশন এবং ডেটা প্রক্রিয়াকরণের ধাপ

১. Django ফর্ম তৈরি করা

Django তে ফর্ম তৈরি করার জন্য forms.py ফাইল ব্যবহার করা হয়। এই ফাইলে আপনি ফর্ম ফিল্ডস এবং তাদের ভ্যালিডেশন কনফিগার করতে পারেন।

এখানে একটি সাধারণ ফর্ম উদাহরণ:

# forms.py
from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

এই ফর্মে তিনটি ফিল্ড রয়েছে: name, email, এবং message। Django নিজেই ফিল্ডগুলির জন্য ইনবিল্ট ভ্যালিডেশন সিস্টেম প্রদান করে (যেমন, ইমেইল ফিল্ডে ইমেইল ফরম্যাট চেক করা ইত্যাদি)।


২. ফর্মের জন্য ভিউ তৈরি করা

ফর্মের ডেটা প্রক্রিয়াকরণ করতে আপনাকে একটি ভিউ (view) তৈরি করতে হবে, যা ফর্ম সাবমিশন গ্রহণ করবে এবং প্রয়োজনীয় প্রক্রিয়াগুলি সম্পন্ন করবে।

এখানে একটি সাধারণ ভিউ উদাহরণ:

# views.py
from django.shortcuts import render
from .forms import ContactForm

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # ফর্মের ডেটা প্রক্রিয়াকরণ (যেমন, ইমেইল পাঠানো বা ডেটাবেসে সংরক্ষণ)
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']
            # এখানে ডেটা প্রক্রিয়াকরণের কোড লেখা হবে
            return render(request, 'success.html', {'name': name})
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

এই ভিউতে:

  • যদি POST রিকোয়েস্ট আসে, অর্থাৎ ফর্ম সাবমিট করা হয়েছে, তখন ContactForm তৈরি হবে এবং request.POST এর মাধ্যমে ডেটা পাঠানো হবে।
  • ফর্মটি যদি সঠিকভাবে পূর্ণ (valid) হয়, তবে form.cleaned_data থেকে ফর্ম ডেটা গ্রহণ করা হবে এবং প্রয়োজনীয় প্রক্রিয়াগুলি সম্পন্ন করা হবে (যেমন ডেটা সংরক্ষণ বা ইমেইল পাঠানো)।
  • অন্যথায়, ফর্মটি নতুনভাবে রেন্ডার করা হবে।

৩. টেমপ্লেট তৈরি করা

ফর্মটি ইউজারের কাছে প্রদর্শন করার জন্য আপনাকে একটি টেমপ্লেট তৈরি করতে হবে, যেখানে ফর্মটি রেন্ডার করা হবে।

এখানে একটি সাধারণ contact.html টেমপ্লেট:

<!-- contact.html -->
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Send</button>
</form>

এই টেমপ্লেটে:

  • {% csrf_token %} CSRF (Cross-Site Request Forgery) টোকেন, যা Django দ্বারা নিরাপত্তার জন্য প্রদান করা হয়।
  • {{ form.as_p }} ফর্মের সব ফিল্ডকে <p> ট্যাগের মধ্যে রেন্ডার করবে।
  • <button type="submit"> এর মাধ্যমে ফর্ম সাবমিট করা হবে।

এছাড়া, যদি ফর্মটি সফলভাবে সাবমিট হয়, তবে ইউজারকে success.html টেমপ্লেট দেখানো হবে।


৪. ফর্মের ডেটা ভ্যালিডেশন

Django ফর্ম সিস্টেম ইনবিল্ট ভ্যালিডেশন প্রদান করে। উদাহরণস্বরূপ, email ফিল্ডে শুধুমাত্র বৈধ ইমেইল অ্যাড্রেস গ্রহণ করবে। আপনি কাস্টম ভ্যালিডেশনও যুক্ত করতে পারেন:

# forms.py
class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

    def clean_message(self):
        message = self.cleaned_data.get('message')
        if 'spam' in message:
            raise forms.ValidationError("Spam message detected!")
        return message

এখানে clean_message মেথডটি কাস্টম ভ্যালিডেশন যুক্ত করেছে, যা ফর্মে 'spam' শব্দ থাকলে একটি ত্রুটি তৈরি করবে।


৫. ফর্মের ডেটা প্রক্রিয়াকরণ

ফর্ম সাবমিশনের পর ডেটা প্রক্রিয়াকরণ বিভিন্ন কাজের জন্য ব্যবহার করা যেতে পারে, যেমন:

  • ডেটাবেসে সংরক্ষণ: ফর্ম ডেটা মডেলে সংরক্ষণ করা যায়।
  • ইমেইল পাঠানো: ফর্মের ডেটা ব্যবহার করে একটি কাস্টম ইমেইল পাঠানো যেতে পারে।
  • থার্ড-পার্টি সার্ভিসে পাঠানো: ফর্মের ডেটা থার্ড-পার্টি API বা সার্ভিসে পাঠানো যেতে পারে।

এখানে একটি উদাহরণ, যেখানে ফর্মের ডেটা ডেটাবেসে সংরক্ষিত হয়:

# views.py
from .models import ContactMessage

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # ফর্মের ডেটা ডেটাবেসে সংরক্ষণ
            ContactMessage.objects.create(
                name=form.cleaned_data['name'],
                email=form.cleaned_data['email'],
                message=form.cleaned_data['message']
            )
            return render(request, 'success.html', {'name': form.cleaned_data['name']})
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

সারাংশ

Django তে ফর্ম সাবমিশন এবং ডেটা প্রক্রিয়াকরণ একটি গুরুত্বপূর্ণ অংশ, যা ইউজার ইনপুটকে ভ্যালিডেট, প্রক্রিয়াকরণ এবং সংরক্ষণ করতে সাহায্য করে। Django এর ফর্ম সিস্টেম স্বয়ংক্রিয়ভাবে ভ্যালিডেশন এবং সুরক্ষা প্রদান করে, যার মাধ্যমে আপনি দ্রুত ও নিরাপদভাবে ফর্ম ডেটা গ্রহণ করতে পারেন।

Content added By

ModelForm এর মাধ্যমে মডেল ডেটা হ্যান্ডলিং

169

Django এর ModelForm একটি শক্তিশালী টুল, যা আপনাকে Django মডেল (Model) থেকে সরাসরি HTML ফর্ম তৈরি এবং ডেটা পরিচালনা করতে সাহায্য করে। ModelForm এর মাধ্যমে আপনি দ্রুত এবং নিরাপদভাবে ডেটাবেসে ডেটা সন্নিবেশ, আপডেট বা মুছতে পারেন, এবং ব্যবহারকারীর ইনপুট সহজে যাচাই (validation) করতে পারেন।


ModelForm কী?

ModelForm হল Django এর একটি ফিচার, যা আপনাকে Django মডেলের জন্য একটি ফর্ম তৈরি করতে সাহায্য করে। এর মাধ্যমে আপনি মডেলের ডেটা সম্পূর্ণভাবে ফর্মের মাধ্যমে ইনপুট নিতে পারেন এবং সেই ডেটা মডেলে সেভ করতে পারেন। ModelForm সাধারণত মডেলের উপর ভিত্তি করে ফর্ম ফিল্ড তৈরি করে এবং মডেলের ডেটা ইনপুট গ্রহণের জন্য প্রয়োজনীয় ডেটা ভ্যালিডেশনও করে।


ModelForm তৈরি করার ধাপ

১. ModelForm ক্লাস তৈরি করা

প্রথমে, আপনি একটি ModelForm ক্লাস তৈরি করবেন, যা আপনার মডেলের উপর ভিত্তি করে ফর্ম তৈরি করবে।

ধরা যাক, আপনার একটি Post মডেল রয়েছে, যা একটি ব্লগ পোস্টের তথ্য ধারণ করে।

Post মডেল:
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

এখন আমরা Post মডেলের জন্য একটি ModelForm তৈরি করবো।

PostModelForm:
from django import forms
from .models import Post

class PostModelForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content', 'author']

এখানে, PostModelForm একটি ModelForm ক্লাস, যেটি Post মডেলটি ব্যবহার করে। fields অ্যাট্রিবিউটে আমরা যেসব ফিল্ডকে ফর্মে অন্তর্ভুক্ত করতে চাই, সেগুলো উল্লেখ করি। এখানে title, content, এবং author ফিল্ডগুলোকে ফর্মে অন্তর্ভুক্ত করা হয়েছে।


ModelForm এর মাধ্যমে ডেটা হ্যান্ডলিং

২. ফর্মে ডেটা ইনপুট করা

একটি HTML ফর্ম তৈরি করতে, আপনি PostModelForm ফর্ম ব্যবহার করতে পারেন। Django টেমপ্লেট ব্যবহার করে ফর্মটি রেন্ডার করা যাবে।

টেমপ্লেট:
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>

এখানে, {% csrf_token %} ট্যাগটি CSRF নিরাপত্তা জন্য প্রয়োজনীয়। {{ form.as_p }} ফর্মটি প্যারাগ্রাফ আকারে রেন্ডার করবে, যাতে প্রতিটি ফর্ম ফিল্ড আলাদা প্যারাগ্রাফে প্রদর্শিত হয়।

৩. ভিউতে ModelForm এর মাধ্যমে ডেটা সেভ করা

ভিউতে ফর্মের ডেটা প্রক্রিয়া করতে এবং সেভ করতে আপনি POST রিকোয়েস্ট যাচাই করবেন এবং ফর্মটি সেভ করবেন।

views.py:
from django.shortcuts import render, redirect
from .forms import PostModelForm

def create_post(request):
    if request.method == 'POST':
        form = PostModelForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('post_list')  # পোস্ট তৈরি হলে পোস্টের তালিকা পেজে রিডিরেক্ট করবে
    else:
        form = PostModelForm()

    return render(request, 'create_post.html', {'form': form})

এখানে, আমরা প্রথমে চেক করি যে রিকোয়েস্টটি POST কিনা। যদি POST হয়, তাহলে ফর্মের ডেটা নেয়া হয় এবং ফর্মটি যাচাই করা হয় (form.is_valid())। যদি ফর্মটি বৈধ হয়, তাহলে ডেটা মডেলে সেভ করা হয় (form.save()) এবং তারপর একটি নতুন পেজে রিডিরেক্ট করা হয়।


ModelForm এ ভ্যালিডেশন

ModelForm এর মাধ্যমে আপনি ডেটা ভ্যালিডেশন খুব সহজে করতে পারেন। Django ফর্মের জন্য কিছু ডিফল্ট ভ্যালিডেশন প্রদান করে, তবে আপনি নিজেও কাস্টম ভ্যালিডেশন তৈরি করতে পারেন।

৪. কাস্টম ভ্যালিডেশন:

ধরা যাক, আপনি চান যে title ফিল্ডের দৈর্ঘ্য অবশ্যই 10 এর বেশি হতে হবে, তবে আপনি ModelForm এ একটি কাস্টম ক্লিনিং মেথড যোগ করতে পারেন।

class PostModelForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content', 'author']

    def clean_title(self):
        title = self.cleaned_data.get('title')
        if len(title) < 10:
            raise forms.ValidationError('Title must be at least 10 characters long.')
        return title

এখানে, clean_title মেথডটি title ফিল্ডের জন্য কাস্টম ভ্যালিডেশন পরিচালনা করছে। যদি title ফিল্ডের দৈর্ঘ্য 10 এর কম হয়, তাহলে এটি একটি ValidationError ছুড়ে দিবে।


ModelForm ব্যবহার করে মডেল ডেটা আপডেট করা

ModelForm কেবল নতুন ডেটা তৈরি করতে নয়, বরং বিদ্যমান ডেটা আপডেট করতেও ব্যবহৃত হতে পারে। যখন আপনি একটি বিদ্যমান রেকর্ড এডিট করবেন, তখন শুধু সেই রেকর্ডটি ফর্মে প্রেরণ করতে হবে।

উদাহরণ:

from django.shortcuts import get_object_or_404

def edit_post(request, post_id):
    post = get_object_or_404(Post, id=post_id)
    if request.method == 'POST':
        form = PostModelForm(request.POST, instance=post)
        if form.is_valid():
            form.save()
            return redirect('post_list')
    else:
        form = PostModelForm(instance=post)

    return render(request, 'edit_post.html', {'form': form})

এখানে, instance=post অংশটি বিদ্যমান post রেকর্ডটি ফর্মে লোড করার জন্য ব্যবহার করা হয়েছে, যাতে আপনি সেটি আপডেট করতে পারেন।


সারাংশ

Django এর ModelForm ব্যবহার করে মডেল ডেটা হ্যান্ডলিং খুব সহজ এবং দ্রুত হতে পারে। এটি আপনাকে ডেটাবেসের ডেটা ম্যানিপুলেট করতে সাহায্য করে এবং স্বয়ংক্রিয়ভাবে ডেটা ভ্যালিডেশনও করে। ModelForm দিয়ে আপনি নতুন ডেটা তৈরি, বিদ্যমান ডেটা আপডেট এবং ডিলিট করতে পারেন, এবং সবকিছু Django এর ORM এর মাধ্যমে সহজে ম্যানেজ করতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...